<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/page.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/page.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfUEFHRV9IXzA_"><span class="b">_ASM_X86_PAGE_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfUEFHRV9IXzA_"><span class="b">_ASM_X86_PAGE_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="Maybe">       5:</span> 
<a name="6" /><span class="Maybe">       6:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_X19LRVJORUxfX18w"><span class="b">__KERNEL__</span></a>
<a name="7" /><span class="Maybe">       7:</span> 
<a name="8" /><span class="Maybe">       8:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">page_types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="9" /><span class="Maybe">       9:</span> 
<a name="10" /><span class="Maybe">      10:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="11" /><span class="Maybe">      11:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">page_64</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="12" /><span class="False">      12:</span> <span class="f">#</span><span class="n">else</span>
<a name="13" /><span class="False">      13:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">page_32</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="14" /><span class="Maybe">      14:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* CONFIG_X86_64 */</span>
<a name="15" /><span class="Maybe">      15:</span> 
<a name="16" /><span class="Maybe">      16:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="17" /><span class="Maybe">      17:</span> 
<a name="18" /><span class="Maybe">      18:</span> <span class="m">struct</span> <span class="b">page</span><span class="f">;</span>
<a name="19" /><span class="Maybe">      19:</span> 
<a name="20" /><span class="Maybe">      20:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">range</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="21" /><span class="Maybe">      21:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">range</span> <span class="b">pfn_mapped</span><span class="f">[</span><span class="f">]</span><span class="f">;</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">nr_pfn_mapped</span><span class="f">;</span>
<a name="23" /><span class="Maybe">      23:</span> 
<a name="24" /><span class="Maybe">      24:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">clear_user_page</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">page</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">vaddr</span><span class="f">,</span>
<a name="25" /><span class="Maybe">      25:</span>                    <span class="m">struct</span> <span class="b">page</span> <span class="f">*</span><span class="b">pg</span><span class="f">)</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="f">{</span>
<a name="27" /><span class="Maybe">      27:</span>     <span class="b">clear_page</span><span class="f">(</span><span class="b">page</span><span class="f">)</span><span class="f">;</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">}</span>
<a name="29" /><span class="Maybe">      29:</span> 
<a name="30" /><span class="Maybe">      30:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">copy_user_page</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">to</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">from</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">vaddr</span><span class="f">,</span>
<a name="31" /><span class="Maybe">      31:</span>                   <span class="m">struct</span> <span class="b">page</span> <span class="f">*</span><span class="b">topage</span><span class="f">)</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="f">{</span>
<a name="33" /><span class="Maybe">      33:</span>     <span class="b">copy_page</span><span class="f">(</span><span class="b">to</span><span class="f">,</span> <span class="b">from</span><span class="f">)</span><span class="f">;</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="f">}</span>
<a name="35" /><span class="Maybe">      35:</span> 
<a name="36" /><span class="Maybe">      36:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19hbGxvY196ZXJvZWRfdXNlcl9oaWdocGFnZV8w"><span class="b">__alloc_zeroed_user_highpage</span></a><span class="f">(</span><span class="b">movableflags</span><span class="f">,</span> <span class="b">vma</span><span class="f">,</span> <span class="b">vaddr</span><span class="f">)</span> \
<a name="37" /><span class="Maybe">      37:</span>     <a href="cpu.c_macros_noref.html#_YWxsb2NfcGFnZV92bWFfMA__"><span class="b">alloc_page_vma</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_R0ZQX0hJR0hVU0VSXzA_"><span class="b">GFP_HIGHUSER</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X19HRlBfWkVST18w"><span class="b">__GFP_ZERO</span></a> <span class="f">|</span> <span class="b">movableflags</span><span class="f">,</span> <span class="b">vma</span><span class="f">,</span> <span class="b">vaddr</span><span class="f">)</span>
<a name="38" /><span class="Maybe">      38:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19IQVZFX0FSQ0hfQUxMT0NfWkVST0VEX1VTRVJfSElHSFBBR0VfMA__"><span class="b">__HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE</span></a>
<a name="39" /><span class="Maybe">      39:</span> 
<a name="40" /><span class="Maybe">      40:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wYV8w"><span class="b">__pa</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X19waHlzX2FkZHJfMA__"><span class="b">__phys_addr</span></a><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span>
<a name="41" /><span class="Maybe">      41:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19wYV9ub2RlYnVnXzA_"><span class="b">__pa_nodebug</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__phys_addr_nodebug</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span>
<a name="42" /><span class="Maybe">      42:</span> <span class="k">/* __pa_symbol should be used for C visible symbols.</span>
<a name="43" /><span class="Maybe">      43:</span> <span class="k">   This seems to be the official gcc blessed way to do such arithmetic. */</span>
<a name="44" /><span class="Maybe">      44:</span> <span class="k">/*</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="k"> * We need __phys_reloc_hide() here because gcc may assume that there is no</span>
<a name="46" /><span class="Maybe">      46:</span> <span class="k"> * overflow during __pa() calculation and can optimize it unexpectedly.</span>
<a name="47" /><span class="Maybe">      47:</span> <span class="k"> * Newer versions of gcc provide -fno-strict-overflow switch to handle this</span>
<a name="48" /><span class="Maybe">      48:</span> <span class="k"> * case properly. Once all supported versions of gcc understand it, we can</span>
<a name="49" /><span class="Maybe">      49:</span> <span class="k"> * remove this Voodoo magic stuff. (i.e. once gcc3.x is deprecated)</span>
<a name="50" /><span class="Maybe">      50:</span> <span class="k"> */</span>
<a name="51" /><span class="Maybe">      51:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wYV9zeW1ib2xfMA__"><span class="b">__pa_symbol</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> \
<a name="52" /><span class="Maybe">      52:</span>     <a href="cpu.c_macros_noref.html#_X19waHlzX2FkZHJfc3ltYm9sXzA_"><span class="b">__phys_addr_symbol</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_X19waHlzX3JlbG9jX2hpZGVfMA__"><span class="b">__phys_reloc_hide</span></a><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="53" /><span class="Maybe">      53:</span> 
<a name="54" /><span class="Maybe">      54:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X192YV8w"><span class="b">__va</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>            <span class="f">(</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">+</span><a href="cpu.c_macros_ref.html#_UEFHRV9PRkZTRVRfMA__"><span class="b">PAGE_OFFSET</span></a><span class="f">)</span><span class="f">)</span>
<a name="55" /><span class="Maybe">      55:</span> 
<a name="56" /><span class="Maybe">      56:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19ib290X3ZhXzA_"><span class="b">__boot_va</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X192YV8w"><span class="b">__va</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="57" /><span class="Maybe">      57:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19ib290X3BhXzA_"><span class="b">__boot_pa</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X19wYV8w"><span class="b">__pa</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="58" /><span class="Maybe">      58:</span> 
<a name="59" /><span class="Maybe">      59:</span> <span class="k">/*</span>
<a name="60" /><span class="Maybe">      60:</span> <span class="k"> * virt_to_page(kaddr) returns a valid pointer if and only if</span>
<a name="61" /><span class="Maybe">      61:</span> <span class="k"> * virt_addr_valid(kaddr) returns true.</span>
<a name="62" /><span class="Maybe">      62:</span> <span class="k"> */</span>
<a name="63" /><span class="Maybe">      63:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dmlydF90b19wYWdlXzA_"><span class="b">virt_to_page</span></a><span class="f">(</span><span class="b">kaddr</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGZuX3RvX3BhZ2VfMA__"><span class="b">pfn_to_page</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_X19wYV8w"><span class="b">__pa</span></a><span class="f">(</span><span class="b">kaddr</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="64" /><span class="Maybe">      64:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGZuX3RvX2thZGRyXzA_"><span class="b">pfn_to_kaddr</span></a><span class="f">(</span><span class="b">pfn</span><span class="f">)</span>      <a href="cpu.c_macros_ref.html#_X192YV8w"><span class="b">__va</span></a><span class="f">(</span><span class="f">(</span><span class="b">pfn</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="65" /><span class="Maybe">      65:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">__virt_addr_valid</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">kaddr</span><span class="f">)</span><span class="f">;</span>
<a name="66" /><span class="Maybe">      66:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_dmlydF9hZGRyX3ZhbGlkXzA_"><span class="b">virt_addr_valid</span></a><span class="f">(</span><span class="b">kaddr</span><span class="f">)</span>    <span class="b">__virt_addr_valid</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span> <span class="f">(</span><span class="b">kaddr</span><span class="f">)</span><span class="f">)</span>
<a name="67" /><span class="Maybe">      67:</span> 
<a name="68" /><span class="Maybe">      68:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __ASSEMBLY__ */</span>
<a name="69" /><span class="Maybe">      69:</span> 
<a name="70" /><span class="Maybe">      70:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">-</span><span class="b">generic</span><span class="f">/</span><span class="b">memory_model</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="71" /><span class="Maybe">      71:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">-</span><span class="b">generic</span><span class="f">/</span><span class="b">getorder</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="72" /><span class="Maybe">      72:</span> 
<a name="73" /><span class="Maybe">      73:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfR0FURV9BUkVBXzA_"><span class="b">__HAVE_ARCH_GATE_AREA</span></a> <span class="c">1</span>
<a name="74" /><span class="Maybe">      74:</span> 
<a name="75" /><span class="Maybe">      75:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __KERNEL__ */</span>
<a name="76" /><span class="True">      76:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_PAGE_H */</span>
<a name="77" /><span class="True">      77:</span> </pre>
  </body>
</html>
